package com.hillfly.mybatis.shard.annotation;

import com.hillfly.mybatis.shard.strategy.Strategy;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 标识Mapper是分表对象
 * 当TYPE与METHOD冲突时，按METHOD处理
 * 当excludes与includes冲突时，按excludes处理
 */
@Documented
@Retention(RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ShardTable {

    /**
     * 分表策略class
     *
     * @return
     */
    Class<? extends Strategy> strategy();

    /**
     * 忽略处理的表名
     *
     * @return
     */
    String[] excludes() default "";

    /**
     * 需要处理的表名
     *
     * @return
     */
    String[] includes() default "";

    /**
     * 是否继承
     * method注解属性是否继承自type注解
     * @return
     */
    boolean isInherit() default false;

}
